WPT
wpt / url / url-setters.any.worker.html?exclude=(file|javascript|mailto)
Spec: URL ↗
Runs: Chrome 155.0.8043.0 (wpt@d6328700c, 2026-09-05) | Firefox 157.0a1 (wpt@9b965429d, 2026-09-05) | Safari 251 preview (wpt@c29bd2aee, 2026-09-05) | Ladybird 1.0-4912a (wpt@9b965429d, 2026-09-05) | Servo Servo 0.6 (wpt@2c385f65e, 2026-09-04) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 224/279 | 226/279 | 246/279 | 246/279 | 257/279 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| Loading data… | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <a://example.net>.protocol = '' The empty string is not a valid scheme. Setter leaves the URL unchanged. | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <a://example.net>.protocol = 'b' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <a://example.net>.protocol = 'B' Upper-case ASCII is lower-cased | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <a://example.net>.protocol = 'é' Non-ASCII is rejected | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <a://example.net>.protocol = '0b' No leading digit | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <a://example.net>.protocol = '+b' No leading punctuation | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <a://example.net>.protocol = 'bC0+-.' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <a://example.net>.protocol = 'b,c' Only some punctuation is acceptable | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <a://example.net>.protocol = 'bé' Non-ASCII is rejected | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://test@example.net>.protocol = 'file' Can’t switch from URL containing username/password/port to file | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <https://example.net:1234>.protocol = 'file' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <wss://x:x@example.net:1234>.protocol = 'file' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://example.net>.protocol = 'b' Can’t switch from special scheme to non-special | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <https://example.net>.protocol = 's' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <ftp://example.net>.protocol = 'test' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <ssh://me@example.net>.protocol = 'http' Can’t switch from non-special scheme to special | FAIL | PASS | PASS | PASS | PASS | — |
| URL: Setting <ssh://me@example.net>.protocol = 'https' | FAIL | PASS | PASS | PASS | PASS | — |
| URL: Setting <ssh://me@example.net>.protocol = 'file' | FAIL | PASS | PASS | PASS | PASS | — |
| URL: Setting <ssh://example.net>.protocol = 'file' | FAIL | PASS | PASS | PASS | PASS | — |
| URL: Setting <nonsense:///test>.protocol = 'https' | FAIL | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://example.net>.protocol = 'https:foo : bar' Stuff after the first ':' is ignored | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <data:text/html,<p>Test>.protocol = 'view-source+data:foo : bar' Stuff after the first ':' is ignored | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://foo.com:443/>.protocol = 'https' Port is set to null if it is the default for new scheme. | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://test/>.protocol = 'h tt ps' Tab and newline are stripped | FAIL | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://test/>.protocol = 'https ' | FAIL | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://test/>.protocol = 'https ' Non-tab/newline C0 controls result in no-op | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://test/>.protocol = 'https' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://test/>.protocol = 'https' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://test/>.protocol = 'https ' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <unix:/run/foo.socket>.username = 'me' No host means no username | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://example.net>.username = 'me' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://:secret@example.net>.username = 'me' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://me@example.net>.username = '' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://me:secret@example.net>.username = '' | PASS | PASS | PASS | PASS | PASS | — |
| URL: Setting <http://example.net>.username = ' |